﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using FranceTriple.Dal;

namespace TeamFranceTriple
{
    public partial class Default2 : System.Web.UI.Page
    {
        protected SiteMaster ThisMaster;
        private String AdressIp;

        private string GetUserIp
        {
            get
            {
                //Retrouver l'adresse d'origine, même si le visiteur est derriere un proxy
                AdressIp = Request.ServerVariables["REMOTE_HOST"].ToString();
                if (Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
                    AdressIp = Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

                //Afin d'éviter un petit bug aux développeurs qui ont l'ip v6
                if (AdressIp == "::1")
                    AdressIp = "127.0.0.1";

                return AdressIp.Substring(0, (AdressIp.Length > 15 ? 15 : AdressIp.Length));
            }
        }

        protected void Page_Init(object sender, EventArgs e)
        {
            Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);

            ThisMaster = ((SiteMaster)this.Master);

            if (Session["Requester"] != null)
                ThisMaster.Requester = Session["Requester"] as Requester;
            else
            {
                ThisMaster.Requester = new Requester()
                {
                    Culture ="fr-fr",
                    IpAddress = this.GetUserIp,
                    IsAuthenticated = Page.User.Identity.IsAuthenticated,
                    Membership = (Session["AnonymousID"] == null) ?
                        //Centralise le membership et le profile utilisateur dans une propriété publique
                        //Met à jour la date de dernière activité
                     Membership.GetUser(true) : null,
                    Profile = UserProfile.GetUserProfile(),
                    Roles = Roles.GetRolesForUser(),
                };
                //Mettre à jour le cache avec les nouvelles informations
                Session["Requester"] = ThisMaster.Requester;
            }
        }
    }
}